/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxline.clinicplus.service.odonto;

import br.com.foxline.clinicplus.entity.odonto.Dente;
import br.com.foxline.clinicplus.entity.odonto.TipoDente;
import br.com.foxline.clinicplus.service.GenericService;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;

/**
 *
 * @author roniere
 */
@Stateless
public class DenteService extends GenericService<Dente> {

    public DenteService() {
        super(Dente.class);
    }

    private List<Dente> preencher(boolean deciduo, int[] numeroDentes) {

        List<Dente> dentesSuperiores = new ArrayList<Dente>();

        Dente dente;
        int codigoDente;
        for (int i = 0; i < numeroDentes.length; i++) {

            codigoDente = numeroDentes[i];

            if (deciduo) {
                codigoDente = getDeciduo(codigoDente);
            }

            dente = new Dente(codigoDente, "", false, null, (deciduo ? TipoDente.DECIDUO : TipoDente.PERMANENTE));

            dentesSuperiores.add(dente);

        }

        return dentesSuperiores;
    }

    public int[] getSuperiores() {
        int[] superior = {18, 17, 16, 15, 14, 13, 12, 11, 21, 22, 23, 24, 25, 26, 27, 28};
        return superior;
    }

    public int[] getInferiores() {
        int[] inferiores = {48, 47, 46, 45, 44, 43, 42, 41, 31, 32, 33, 34, 35, 36, 37, 38};
        return inferiores;
    }

    public List<Dente> preencherSuperiores(boolean deciduo) {
        return preencher(deciduo, getSuperiores());
    }

    public List<Dente> preencherInferiores(boolean deciduo) {
        return preencher(deciduo, getInferiores());
    }

    public Integer getPermanente(int deciduo) {

        switch (deciduo) {
            case 55:
                return 15;
            case 54:
                return 14;
            case 53:
                return 13;
            case 52:
                return 12;
            case 51:
                return 11;
            case 61:
                return 21;
            case 62:
                return 22;
            case 63:
                return 23;
            case 64:
                return 24;
            case 65:
                return 25;
            case 85:
                return 45;
            case 84:
                return 44;
            case 83:
                return 43;
            case 82:
                return 42;
            case 81:
                return 41;
            case 71:
                return 31;
            case 72:
                return 32;
            case 73:
                return 33;
            case 74:
                return 34;
            case 75:
                return 35;
        }

        return deciduo;
    }

    public Integer getDeciduo(int permanente) {

        switch (permanente) {
            case 15:
                return 55;
            case 14:
                return 54;
            case 13:
                return 53;
            case 12:
                return 52;
            case 11:
                return 51;
            case 21:
                return 61;
            case 22:
                return 62;
            case 23:
                return 63;
            case 24:
                return 64;
            case 25:
                return 65;
            case 45:
                return 85;
            case 44:
                return 84;
            case 43:
                return 83;
            case 42:
                return 82;
            case 41:
                return 81;
            case 31:
                return 71;
            case 32:
                return 72;
            case 33:
                return 73;
            case 34:
                return 74;
            case 35:
                return 75;
        }

        return null;
    }
}